SQLiteはファイル1つで動く軽量データベースですが、 そのシンプルさゆえにバックアップ戦略がアプリの信頼性を左右します。 この記事では、SQLiteのバックアップ方法を現場目線でわかりやすくまとめています。
この記事でわかること
・SQLiteの安全なバックアップ方法
・ファイルコピーの注意点
・オンラインバックアップAPIの使い方
・VACUUM INTO の活用
・業務アプリでのベストプラクティス
・SQLiteの安全なバックアップ方法
・ファイルコピーの注意点
・オンラインバックアップAPIの使い方
・VACUUM INTO の活用
・業務アプリでのベストプラクティス
1. SQLiteのバックアップは「ファイルコピー」が基本
SQLiteは1つの .db ファイルがデータベース本体なので、 バックアップは基本的に「ファイルをコピーするだけ」で成立します。
■ C#での基本的なバックアップコード
File.Copy("app.db", "backup/app_backup.db", overwrite: true);
■ メリット
- 高速
- シンプル
- 壊れにくい
■ デメリット
- DBが書き込み中だと壊れる可能性がある
- ロック中はコピーできないことがある
注意:
バックアップ前に「書き込みが終わっている状態」を作ることが重要です。
2. 最も安全:SQLiteの「オンラインバックアップAPI」
SQLiteには、DBを開いたまま安全にバックアップできる オンラインバックアップAPI が用意されています。
■ C#(Microsoft.Data.Sqlite)での実装例
using var source = new SqliteConnection("Data Source=app.db");
using var destination = new SqliteConnection("Data Source=backup.db");
source.Open();
destination.Open();
source.BackupDatabase(destination);
■ メリット
- アプリ稼働中でも安全にバックアップできる
- ロック問題が起きにくい
- 業務アプリで最も推奨される方法
3. VACUUM INTO を使ったバックアップ
SQLite 3.27 以降では、 VACUUM INTO を使って最適化済みのバックアップを作れます。
■ SQL例
VACUUM INTO 'backup.db';
■ 特徴
- 断片化が解消され、最適化されたDBが作られる
- ファイルサイズが小さくなる
- バックアップと最適化を同時に行える
4. バックアップの保存先は「アプリと別フォルダ」が鉄則
SQLiteのDBファイルは、アプリと同じフォルダに置くと 権限問題・上書き事故・アンインストール時の消失が起きやすいです。
■ 推奨パス
- %LOCALAPPDATA%(Windows)
- ユーザーデータフォルダ
- アプリ専用のデータフォルダ
5. バックアップの頻度と運用パターン
■ ① 毎起動時バックアップ
- 小規模アプリ向け
- 起動時に File.Copy するだけ
■ ② 毎日バックアップ
- 業務アプリで最も一般的
- オンラインバックアップAPIが安全
■ ③ 変更があったときだけバックアップ
- データ量が多い場合に有効
- 更新フラグを立てて管理
6. バックアップファイルの世代管理
バックアップは1つだけだと壊れたときに復元できません。
■ 推奨パターン
- 当日分
- 前日分
- 1週間分
- 1か月分
■ C#で日付付きバックアップ
var file = $"backup/app_{DateTime.Now:yyyyMMdd}.db";
File.Copy("app.db", file, overwrite: true);
7. SQLiteバックアップのベストプラクティス
- アプリ稼働中は「オンラインバックアップAPI」が最も安全
- VACUUM INTO で最適化済みバックアップを作れる
- ファイルコピーは「書き込みが終わった状態」で行う
- バックアップは複数世代を残す
- DBファイルはアプリと別フォルダに置く
まとめ:SQLiteは“バックアップしやすいDB”だが戦略が重要
- ファイルコピーだけでバックアップ可能
- オンラインバックアップAPIが最も安全
- VACUUM INTO で最適化も同時にできる
- 世代管理と保存先が信頼性を左右する
SQLiteは軽量で扱いやすい反面、 バックアップ戦略がアプリの信頼性を決めるデータベースです。 この記事を参考に、安全で壊れないバックアップ運用を構築してください。